package GormModel

import (
	"database/sql"
	"encoding/json"
	"time"
)

type TzUserAddr struct {
	AddrID     uint64    `gorm:"primaryKey;autoIncrement;comment:ID"`
	UserID     string    `gorm:"type:varchar(36);not null;default:0;comment:用户 ID"`
	Receiver   string    `gorm:"type:varchar(50);comment:收货人"`
	ProvinceID uint64    `gorm:"comment:省 ID"`
	Province   string    `gorm:"type:varchar(100);comment:省"`
	City       string    `gorm:"type:varchar(20);comment:城市"`
	CityID     uint64    `gorm:"comment:城市 ID"`
	Area       string    `gorm:"type:varchar(20);comment:区"`
	AreaID     uint64    `gorm:"comment:区 ID"`
	PostCode   string    `gorm:"type:varchar(15);comment:邮编"`
	Addr       string    `gorm:"type:varchar(1000);comment:地址"`
	Mobile     string    `gorm:"type:varchar(20);comment:手机"`
	Status     int       `gorm:"not null;comment:状态,1 正常，0 无效"`
	CommonAddr int       `gorm:"not null;default:0;comment:是否默认地址 1 是"`
	CreateTime time.Time `gorm:"not null;comment:建立时间"`
	Version    int       `gorm:"not null;default:0;comment:版本号"`
	UpdateTime time.Time `gorm:"not null;comment:更新时间"`
}

type TzOrderItem struct {
	OrderItemID        uint64    `gorm:"primaryKey;autoIncrement;comment:订单项 ID" json:"orderItemId"`
	ShopID             uint64    `gorm:"not null;comment:店铺 id" json:"shopId"`
	OrderNumber        string    `gorm:"type:varchar(50);not null;comment:订单 order_number" json:"orderNumber"`
	ProdID             uint64    `gorm:"not null;comment:产品 ID" json:"prodId"`
	SkuID              uint64    `gorm:"not null;comment:产品 SkuID" json:"skuId"`
	ProdCount          int       `gorm:"not null;default:0;comment:购物车产品个数" json:"prodCount"`
	ProdName           string    `gorm:"type:varchar(120);not null;default:'';comment:产品名称" json:"prodName"`
	SkuName            string    `gorm:"type:varchar(120);null;default:null;comment:sku 名称" json:"skuName"`
	Pic                string    `gorm:"type:varchar(255);not null;default:'';comment:产品主图片路径" json:"pic"`
	Price              float64   `gorm:"not null;comment:产品价格" json:"price"`
	UserID             string    `gorm:"type:varchar(36);not null;default:'';comment:用户 Id" json:"userId"`
	ProductTotalAmount float64   `gorm:"not null;comment:商品总金额"  json:"productTotalAmount"`
	RecTime            time.Time `gorm:"not null;comment:购物时间" json:"recTime"`
	CommSts            int       `gorm:"not null;default:0;comment:评论状态： 0 未评价  1 已评价" json:"commSts"`
	DistributionCardNo string    `gorm:"type:varchar(36);null;default:null;comment:推广员使用的推销卡号" json:"distributionCardNo"`
	BasketDate         time.Time `gorm:"null;default:null;comment:加入购物车时间" json:"basketDate"`
}

func (TzOrderItem) TableName() string {
	return "tz_order_item"
}

type TzUserAddrOrder struct {
	AddrOrderID uint64 `gorm:"primaryKey;autoIncrement;column:addr_order_id;comment:ID" json:"addrOrderId"`

	AddrID     uint64    `gorm:"column:addr_id;comment:地址ID" json:"addrId" `
	UserID     string    `gorm:"column:user_id;type:varchar(36);default:'0';comment:用户ID" json:"userId"`
	Receiver   string    `gorm:"column:receiver;type:varchar(50);comment:收货人" json:"receiver"`
	ProvinceID *uint64   `gorm:"column:province_id;comment:省ID" json:"provinceId"`
	Province   string    `gorm:"column:province;type:varchar(100);comment:省" json:"province"`
	AreaID     *uint64   `gorm:"column:area_id;comment:区域ID" json:"areaId"`
	Area       string    `gorm:"column:area;type:varchar(20);comment:区" json:"area"`
	CityID     *uint64   `gorm:"column:city_id;comment:城市ID" json:"cityId"`
	City       string    `gorm:"column:city;type:varchar(20);comment:城市" json:"city"`
	Addr       string    `gorm:"column:addr;type:varchar(1000);comment:地址" json:"addr"`
	PostCode   string    `gorm:"column:post_code;type:varchar(15);comment:邮编" json:"postCode"`
	Mobile     string    `gorm:"column:mobile;type:varchar(20);comment:手机" json:"mobile"`
	CreateTime time.Time `gorm:"column:create_time;comment:建立时间" json:"createTime"`
	Version    int       `gorm:"column:version;default:0;comment:版本号" json:"version"`
}

func (TzUserAddrOrder) TableName() string {
	return "tz_user_addr_order"
}

type TzOrder struct {
	OrderID       uint64       `gorm:"column:order_id;primaryKey;autoIncrement;comment:订单 ID"`
	ShopID        uint64       `gorm:"column:shop_id;comment:店铺 id"`
	ProdName      string       `gorm:"column:prod_name;type:varchar(1000);not null;default:'';comment:产品名称,多个产品将会以逗号隔开"`
	UserID        string       `gorm:"column:user_id;type:varchar(36);not null;comment:订购用户 ID"`
	OrderNumber   string       `gorm:"column:order_number;type:varchar(50);not null;comment:订购流水号"`
	Total         float64      `gorm:"column:total;type:decimal(15,2);not null;default:0.00;comment:总值"`
	ActualTotal   float64      `gorm:"column:actual_total;type:decimal(15,2);comment:实际总值"`
	PayType       int          `gorm:"column:pay_type;comment:支付方式 0 手动代付 1 微信支付 2 支付宝"`
	Remarks       string       `gorm:"column:remarks;type:varchar(1024);comment:订单备注"`
	Status        int          `gorm:"column:status;not null;default:0;comment:订单状态 1:待付款 2:待发货 3:待收货 4:待评价 5:成功 6:失败"`
	DvyType       string       `gorm:"column:dvy_type;type:varchar(10);comment:配送类型"`
	DvyID         uint64       `gorm:"column:dvy_id;comment:配送方式 ID"`
	DvyFlowID     string       `gorm:"column:dvy_flow_id;type:varchar(100);default:'';comment:物流单号"`
	FreightAmount float64      `gorm:"column:freight_amount;type:decimal(15,2);default:0.00;comment:订单运费"`
	AddrOrderID   uint64       `gorm:"column:addr_order_id;comment:用户订单地址 Id"`
	ProductNums   int          `gorm:"column:product_nums;comment:订单商品总数"`
	CreateTime    sql.NullTime `gorm:"column:create_time;not null;comment:订购时间"`
	UpdateTime    sql.NullTime `gorm:"column:update_time;comment:订单更新时间"`
	PayTime       sql.NullTime `gorm:"column:pay_time;comment:付款时间"`
	DvyTime       sql.NullTime `gorm:"column:dvy_time;comment:发货时间"`
	FinallyTime   sql.NullTime `gorm:"column:finally_time;comment:完成时间"`
	CancelTime    sql.NullTime `gorm:"column:cancel_time;comment:取消时间"`
	IsPayed       *bool        `gorm:"column:is_payed;comment:是否已经支付，1：已经支付过，0：，没有支付过"`
	DeleteStatus  int          `gorm:"column:delete_status;default:0;comment:用户订单删除状态，0：没有删除， 1：回收站， 2：永久删除"`
	RefundSts     int          `gorm:"column:refund_sts;default:0;comment:0:默认,1:在处理,2:处理完成"`
	ReduceAmount  float64      `gorm:"column:reduce_amount;type:decimal(15,2);comment:优惠总额"`
	OrderType     *int         `gorm:"column:order_type;comment:订单类型"`
	CloseType     *int         `gorm:"column:close_type;comment:订单关闭原因 1-超时未支付 2-退款关闭 4-买家取消 15-已通过货到付款交易"`
}

func (TzOrder) TableName() string {
	return "tz_order"
}

type TzDelivery struct {
	DvyId          uint64    `gorm:"primaryKey;autoIncrement;column:dvy_id" json:"dvyId"`
	DvyName        string    `gorm:"column:dvy_name;not null" json:"dvyName"`
	CompanyHomeUrl string    `gorm:"column:company_home_url" json:"companyHomeUrl"`
	RecTime        time.Time `gorm:"column:rec_time;not null" json:"recTime"`
	ModifyTime     time.Time `gorm:"column:modify_time;not null" json:"modifyTime"`
	QueryUrl       string    `gorm:"column:query_url;not null" json:"queryUrl"`
}

func (TzDelivery) TableName() string {
	return "tz_delivery"
}

// TzTransport 对应数据库表tz_transport的结构体
type TzTransport struct {
	TransportID      int64     `gorm:"primaryKey;autoIncrement;column:transport_id;comment:运费模板id"`
	TransName        string    `gorm:"column:trans_name;type:varchar(36);comment:运费模板名称"`
	CreateTime       time.Time `gorm:"column:create_time;type:datetime;comment:创建时间"`
	ShopID           int64     `gorm:"column:shop_id;type:bigint(20);comment:店铺id"`
	ChargeType       int8      `gorm:"column:charge_type;type:tinyint(2);comment:收费方式（0 按件数,1 按重量 2 按体积）"`
	IsFreeFee        int8      `gorm:"column:is_free_fee;type:tinyint(2);comment:是否包邮 0:不包邮 1:包邮"`
	HasFreeCondition int8      `gorm:"column:has_free_condition;type:tinyint(2);comment:是否含有包邮条件 0 否 1是"`
}

// TzTranscity 对应数据库表 tz_transcity 的结构体
type TzTranscity struct {
	TranscityID int64 `gorm:"primaryKey;autoIncrement;column:transcity_id;comment:指定条件包邮城市项id"`
	TransfeeID  int64 `gorm:"column:transfee_id;comment:指定条件包邮项id"`
	CityID      int64 `gorm:"column:city_id;comment:城市id"`
}

// TzTranscityFree 对应数据库表 tz_transcity_free 的结构体
type TzTranscityFree struct {
	TranscityFreeID int64 `gorm:"primaryKey;autoIncrement;column:transcity_free_id;comment:指定条件包邮城市项id"`
	TransfeeFreeID  int64 `gorm:"column:transfee_free_id;comment:指定条件包邮项id"`
	FreeCityID      int64 `gorm:"column:free_city_id;comment:城市id"`
}

// TzTransfee 对应数据库表 tz_transfee 的结构体
type TzTransfee struct {
	TransfeeID      int64   `gorm:"primaryKey;autoIncrement;column:transfee_id;comment:运费项id"`
	TransportID     int64   `gorm:"column:transport_id;comment:运费模板id"`
	ContinuousPiece float64 `gorm:"column:continuous_piece;type:decimal(15,2);comment:续件数量"`
	FirstPiece      float64 `gorm:"column:first_piece;type:decimal(15,2);comment:首件数量"`
	ContinuousFee   float64 `gorm:"column:continuous_fee;type:decimal(15,2);comment:续件费用"`
	FirstFee        float64 `gorm:"column:first_fee;type:decimal(15,2);comment:首件费用"`
}

// TzTransfeeFree 对应数据库表 tz_transfee_free 的结构体
type TzTransfeeFree struct {
	TransfeeFreeID int64   `gorm:"primaryKey;autoIncrement;column:transfee_free_id;comment:指定条件包邮项id"`
	TransportID    int64   `gorm:"column:transport_id;comment:运费模板id"`
	FreeType       int8    `gorm:"column:free_type;type:tinyint;comment:包邮方式 （0 满x件/重量/体积包邮 1满金额包邮 2满x件/重量/体积且满金额包邮）"`
	Amount         float64 `gorm:"column:amount;type:decimal(15,2);comment:需满金额"`
	Piece          float64 `gorm:"column:piece;type:decimal(15,2);comment:包邮x件/重量/体积"`
}

// TzArea 对应数据库表 tz_area 的结构体
type TzArea struct {
	AreaID   int64  `gorm:"primaryKey;autoIncrement;column:area_id;comment:区域ID"`
	AreaName string `gorm:"column:area_name;type:varchar(100);comment:区域名称"`
}

// TzPickAddr 对应数据库表 tz_pick_addr 的结构体
type TzPickAddr struct {
	AddrID     uint64 `gorm:"primaryKey;autoIncrement;column:addr_id;comment:ID" json:"addrId"`
	AddrName   string `gorm:"column:addr_name;type:varchar(36);comment:自提点名称" json:"addrName"`
	Addr       string `gorm:"column:addr;type:varchar(1000);comment:地址" json:"addr"`
	Mobile     string `gorm:"column:mobile;type:varchar(20);comment:手机" json:"mobile"`
	ProvinceID uint64 `gorm:"column:province_id;comment:省份ID" json:"provinceId"`
	Province   string `gorm:"column:province;type:varchar(32);comment:省份" json:"province"`
	CityID     uint64 `gorm:"column:city_id;comment:城市ID" json:"cityId"`
	City       string `gorm:"column:city;type:varchar(32);comment:城市" json:"city"`
	AreaID     uint64 `gorm:"column:area_id;comment:区/县ID" json:"areaId"`
	Area       string `gorm:"column:area;type:varchar(32);comment:区/县" json:"area"`
	ShopID     uint64 `gorm:"column:shop_id;comment:店铺id" json:"shopId"`
}

// TzUser 对应数据库表 tz_user 的结构体
type TzUser struct {
	UserId        string    `gorm:"type:varchar(36);not null;default:'';primaryKey;comment:'ID'" json:"userId"`
	NickName      string    `gorm:"type:varchar(50);comment:'用户昵称'" json:"nickName"`
	RealName      string    `gorm:"type:varchar(50);comment:'真实姓名'" json:"realName"`
	UserMail      string    `gorm:"type:varchar(100);comment:'用户邮箱';unique" json:"userMail"`
	LoginPassword string    `gorm:"type:varchar(255);comment:'登录密码'" json:"loginPassword"`
	PayPassword   string    `gorm:"type:varchar(50);comment:'支付密码'" json:"payPassword"`
	UserMobile    string    `gorm:"type:varchar(50);comment:'手机号码';unique" json:"userMobile"`
	ModifyTime    time.Time `gorm:"type:datetime;not null;comment:'修改时间'" json:"modifyTime"`
	UserRegtime   time.Time `gorm:"type:datetime;not null;comment:'注册时间'" json:"userRegtime"`
	UserRegip     string    `gorm:"type:varchar(50);comment:'注册IP'" json:"userRegip"`
	UserLasttime  time.Time `gorm:"type:datetime;comment:'最后登录时间'" json:"userLasttime"`
	UserLastip    string    `gorm:"type:varchar(50);comment:'最后登录IP'" json:"userLastip"`
	UserMemo      string    `gorm:"type:varchar(500);comment:'备注'" json:"userMemo"`
	Sex           string    `gorm:"type:char(1);default:'M';comment:'M(男) or F(女)'" json:"sex"`
	BirthDate     string    `gorm:"type:char(10);comment:'例如：2009-11-27'" json:"birthDate"`
	Pic           string    `gorm:"type:varchar(255);comment:'头像图片路径'" json:"pic"`
	Status        int       `gorm:"type:int;not null;default:1;comment:'状态 1 正常 0 无效'" json:"status"`
	Score         int       `gorm:"type:int;comment:'用户积分'" json:"score"`
}

// TzHotSearch 对应数据库表 tz_hot_search 的结构体
type TzHotSearch struct {
	HotSearchId uint64     `gorm:"column:hot_search_id;primaryKey;autoIncrement" json:"hotSearchId"`
	ShopId      int64      `gorm:"column:shop_id" json:"shopId"`
	Content     string     `gorm:"column:content" json:"content"`
	RecDate     *time.Time `gorm:"column:rec_date" json:"recDate" `
	Seq         *int       `gorm:"column:seq" json:"seq"`
	Status      int8       `gorm:"column:status;default:1" json:"status"`
	Title       string     `gorm:"column:title" json:"title"`
}

// TzCategory 对应数据库表 tz_category 的结构体
type TzCategory struct {
	CategoryID   uint64     `gorm:"column:category_id;primaryKey;autoIncrement" json:"categoryId"`
	ShopID       int64      `gorm:"column:shop_id" json:"shopId"`
	ParentID     uint64     `gorm:"column:parent_id" json:"parentId"`
	CategoryName string     `gorm:"column:category_name" json:"categoryName"`
	Icon         string     `gorm:"column:icon" json:"icon"`
	Pic          string     `gorm:"column:pic" json:"pic"`
	Seq          int        `gorm:"column:seq" json:"seq"`
	Status       int        `gorm:"column:status" json:"status"`
	RecTime      *time.Time `gorm:"column:rec_time" json:"recTime"`
	Grade        int        `gorm:"column:grade" json:"grade"`
	UpdateTime   *time.Time `gorm:"column:update_time" json:"updateTime"`
	// 不在数据库表中的字段
	BrandIDs     []uint64     `gorm:"-" json:"brandIds"`
	AttributeIDs []uint64     `gorm:"-" json:"attributeIds"`
	Brands       []TzBrand    `gorm:"-" json:"brands"`
	ProdProps    []TzProdProp `gorm:"-" json:"prodProps"`
	Products     []TzProd     `gorm:"-" json:"products"`
	Categories   []TzCategory `gorm:"-" json:"categories"`
}

func (TzCategory) TableName() string {
	return "tz_category"
}

// TzCategoryProp 对应 Java 中的 CategoryProp 类
type TzCategoryProp struct {
	// 对应 Java 中的 @TableId
	ID int64 `gorm:"primaryKey;column:id" json:"id"`
	// 分类id
	CategoryID int64 `gorm:"column:category_id" json:"categoryId"`
	// 商品属性id即表tz_prod_prop中的prop_id
	PropID int64 `gorm:"column:prop_id" json:"propId"`
}

// TableName 方法用于指定结构体对应的数据库表名
func (TzCategoryProp) TableName() string {
	return "tz_category_prop"
}

// TzNotice 对应数据库表 tz_notice 的结构体
type TzNotice struct {
	ID          int64      `gorm:"primaryKey;autoIncrement;comment:'公告id'" json:"id"`
	ShopId      *int64     `gorm:"type:bigint;comment:'店铺id'" json:"shopId"`
	Title       *string    `gorm:"type:varchar(36);comment:'公告标题'" json:"title"`
	Content     string     `gorm:"type:text;comment:'公告内容'" json:"content"`
	Status      *int8      `gorm:"type:tinyint(1);comment:'状态(1:公布 0:撤回)'" json:"status"`
	IsTop       *int8      `gorm:"type:tinyint;comment:'是否置顶'" json:"isTop"`
	PublishTime *time.Time `gorm:"type:timestamp;comment:'发布时间'" json:"publishTime"`
	UpdateTime  *time.Time `gorm:"type:timestamp;null;default:CURRENT_TIMESTAMP;comment:'更新时间'" json:"updateTime"`
}

// TzSysMenu 定义菜单结构体
type TzSysMenu struct {
	MenuId   *int64 `gorm:"column:menu_id;primaryKey;autoIncrement;not null" json:"menuId"`
	ParentId *int64 `gorm:"column:parent_id;comment:父菜单ID，一级菜单为0" json:"parentId"`
	Name     string `gorm:"column:name;type:varchar(50);comment:菜单名称" json:"name"`
	Url      string `gorm:"column:url;type:varchar(200);comment:菜单URL" json:"url"`
	Perms    string `gorm:"column:perms;type:varchar(500);comment:授权(多个用逗号分隔，如：user:list,user:create)" json:"perms"`
	Type     int    `gorm:"column:type;comment:类型   0：目录   1：菜单   2：按钮" json:"type"`
	Icon     string `gorm:"column:icon;type:varchar(50);comment:菜单图标" json:"icon"`
	OrderNum int    `gorm:"column:order_num;comment:排序" json:"orderNum"`
}

// TableName 指定 TzSysMenu 结构体对应的表名
func (TzSysMenu) TableName() string {
	return "tz_sys_menu"
}

// TzSku 对应 tz_sku 表的实体结构体
type TzSku struct {
	SkuID        *uint64    `gorm:"column:sku_id;primaryKey;autoIncrement" json:"skuId"`
	ProdID       *uint64    `gorm:"column:prod_id;not null" json:"prodId"`
	Properties   *string    `gorm:"column:properties;type:varchar(2000);default:''" json:"properties"`
	OriPrice     *float64   `gorm:"column:ori_price;type:decimal(15,2)" json:"oriPrice"`
	Price        *float64   `gorm:"column:price;type:decimal(15,2)" json:"price"`
	Stocks       *int       `gorm:"column:stocks;not null" json:"stocks"`
	ActualStocks *int       `gorm:"column:actual_stocks" json:"actualStocks"`
	UpdateTime   *time.Time `gorm:"column:update_time;not null" json:"updateTime"`
	RecTime      *time.Time `gorm:"column:rec_time;not null" json:"recTime"`
	PartyCode    *string    `gorm:"column:party_code;type:varchar(100)" json:"partyCode"`
	ModelID      *string    `gorm:"column:model_id;type:varchar(100)" json:"modelId"`
	Pic          *string    `gorm:"column:pic;type:varchar(500)" json:"pic"`
	SkuName      *string    `gorm:"column:sku_name;type:varchar(120)" json:"skuName"`
	ProdName     *string    `gorm:"column:prod_name;type:varchar(255)" json:"prodName"`
	Version      *int       `gorm:"column:version;not null;default:0" json:"version"`
	Weight       *float64   `gorm:"column:weight" json:"weight"`
	Volume       *float64   `gorm:"column:volume" json:"volume"`
	Status       *int       `gorm:"column:status;default:1" json:"status"`
	IsDelete     *int       `gorm:"column:is_delete" json:"isDelete"`
}

// TableName 实现gorm的TableName方法，用于指定该结构体对应的数据库表名
func (TzSku) TableName() string {
	return "tz_sku"
}

// TzProd 对应 tz_prod 表的实体结构体
type TzProd struct {
	ProdID             *uint64       `gorm:"column:prod_id;primaryKey;autoIncrement" json:"prodId"`
	ProdName           *string       `gorm:"column:prod_name;type:varchar(300);not null;default:''" json:"prodName"`
	ShopID             *int64        `gorm:"column:shop_id" json:"shopId"`
	OriPrice           *float64      `gorm:"column:ori_price;type:decimal(15,2);default:0.00" json:"oriPrice"`
	Price              *float64      `gorm:"column:price;type:decimal(15,2)" json:"price"`
	Brief              *string       `gorm:"column:brief;type:varchar(500);default:''" json:"brief"`
	Content            *string       `gorm:"column:content;type:text" json:"content"`
	Pic                *string       `gorm:"column:pic;type:varchar(255)" json:"pic"`
	Imgs               *string       `gorm:"column:imgs;type:varchar(1000)" json:"imgs"`
	Status             *int          `gorm:"column:status;default:0" json:"status"`
	CategoryID         *uint64       `gorm:"column:category_id" json:"categoryId"`
	SoldNum            *int          `gorm:"column:sold_num" json:"soldNum"`
	TotalStocks        *int          `gorm:"column:total_stocks;default:0" json:"totalStocks"`
	DeliveryMode       SqlNullString `gorm:"column:delivery_mode;type:json" json:"deliveryMode"`
	DeliveryTemplateID *int64        `gorm:"column:delivery_template_id" json:"deliveryTemplateId"`
	CreateTime         *time.Time    `gorm:"column:create_time" json:"createTime"`
	UpdateTime         *time.Time    `gorm:"column:update_time" json:"updateTime"`
	PutawayTime        *time.Time    `gorm:"column:putaway_time" json:"putawayTime"`
	Version            *int          `gorm:"column:version" json:"version"`
	SkuList            []TzSku       `gorm:"-" json:"skuList"`
	TagList            []int64       `gorm:"-" json:"tagList"`
}

// SqlNullString 自定义类型，用于包装 sql.NullString
type SqlNullString struct {
	sql.NullString
}

// MarshalJSON 自定义 JSON 编码方法
func (s SqlNullString) MarshalJSON() ([]byte, error) {
	if !s.Valid {
		return []byte("null"), nil
	}
	return json.Marshal(s.String)
}

// TableName 返回该结构体对应的数据库表名
func (TzProd) TableName() string {
	return "tz_prod"
}

// TzProdTagReference 对应 Java 中的 ProdTagReference 类
type TzProdTagReference struct {
	// 分组引用id
	ReferenceID int64 `gorm:"primaryKey;column:reference_id" json:"referenceId"`
	// 店铺id
	ShopID int64 `gorm:"column:shop_id" json:"shopId"`
	// 标签id
	TagID int64 `gorm:"column:tag_id" json:"tagId"`
	// 商品id
	ProdID int64 `gorm:"column:prod_id" json:"prodId"`
	// 状态(1:正常,0:删除)
	Status int `gorm:"column:status" json:"status"`
	// 创建时间
	CreateTime time.Time `gorm:"column:create_time" json:"createTime"`
}

// TableName 指定表名，对应 Java 中的 @TableName 注解
func (TzProdTagReference) TableName() string {
	return "tz_prod_tag_reference"
}

// TzProdPropValue 对应 Java 中的 ProdPropValue 类
type TzProdPropValue struct {
	// 属性值ID
	ValueID int64 `gorm:"primaryKey;column:value_id" json:"valueId" form:"valueId"`
	// 属性值名称
	PropValue string `gorm:"column:prop_value" json:"propValue" form:"propValue"`
	// 属性ID
	PropID int64 `gorm:"column:prop_id" json:"propId" form:"propId"`
}

// TableName 指定表名，对应 Java 中的 @TableName 注解
func (TzProdPropValue) TableName() string {
	return "tz_prod_prop_value"
}

// TzProdProp 对应 Java 中的 ProdProp 类
type TzProdProp struct {
	// 属性id
	PropID int64 `gorm:"primaryKey;column:prop_id" json:"propId" form:"propId"`
	// 属性名称
	PropName string `gorm:"column:prop_name" json:"propName" form:"propName"`
	// 1:销售属性(规格); 2:参数属性;
	Rule int `gorm:"column:rule" json:"rule" form:"rule"`
	// 店铺id
	ShopID int64 `gorm:"column:shop_id" json:"shopId" form:"shopId"`
	// 属性值
	ProdPropValues []TzProdPropValue `gorm:"-" json:"prodPropValues" form:"prodPropValues"`
}

// TableName 指定表名，对应 Java 中的 @TableName 注解
func (TzProdProp) TableName() string {
	return "tz_prod_prop"
}

// TzProdTag 对应 Java 中的 ProdTag 类

type TzProdTag struct {
	// 分组标签id
	ID int64 `gorm:"primaryKey;column:id" json:"id" form:"id"`
	// 分组标题
	Title string `gorm:"column:title" json:"title" form:"title"`
	// 店铺Id
	ShopID int64 `gorm:"column:shop_id" json:"shopId" form:"shopId"`
	// 状态(1为正常,0为删除)
	Status int `gorm:"column:status" json:"status" form:"status"`
	// 默认类型(0:商家自定义,1:系统默认类型)
	IsDefault int `gorm:"column:is_default" json:"isDefault" form:"isDefault"`
	// 商品数量
	ProdCount int64 `gorm:"column:prod_count" json:"prodCount" form:"prodCount"`
	// 排序
	Seq int `gorm:"column:seq" json:"seq" form:"seq"`
	// 列表样式(0:一列一个,1:一列两个,2:一列三个)
	Style int `gorm:"column:style" json:"style" form:"style"`
	// 创建时间
	CreateTime *time.Time `gorm:"column:create_time" json:"createTime" form:"createTime"`
	// 修改时间
	UpdateTime *time.Time `gorm:"column:update_time" json:"updateTime" form:"updateTime"`
	// 删除时间
	DeleteTime *time.Time `gorm:"column:delete_time" json:"deleteTime" form:"deleteTime"`
}

// TableName 指定表名，对应 Java 中的 @TableName 注解
func (TzProdTag) TableName() string {
	return "tz_prod_tag"
}

// TzCategoryBrand 定义分类品牌实体类
type TzCategoryBrand struct {
	// 定义主键，gorm:"primaryKey;column:id" 表示该字段为主键且对应数据库列名为 id
	ID uint64 `gorm:"primaryKey;column:id" json:"id"`
	// 分类 ID，gorm:"column:category_id" 表示该字段对应数据库列名为 category_id
	CategoryID uint64 `gorm:"column:category_id" json:"category_id"`
	// 品牌 ID，gorm:"column:brand_id" 表示该字段对应数据库列名为 brand_id
	BrandID uint64 `gorm:"column:brand_id" json:"brand_id"`
}

// TableName 定义数据库表名
func (TzCategoryBrand) TableName() string {
	return "tz_category_brand"
}

// TzBrand 定义品牌实体类
type TzBrand struct {
	// 定义主键，gorm:"primaryKey;column:brand_id" 表示该字段为主键且对应数据库列名为 brand_id
	BrandID uint64 `gorm:"primaryKey;column:brand_id" json:"brandId"`
	// 品牌名称，gorm:"column:brand_name" 表示该字段对应数据库列名为 brand_name
	BrandName string `gorm:"column:brand_name" json:"brandName"`
	// 图片路径，gorm:"column:brand_pic" 表示该字段对应数据库列名为 brand_pic
	BrandPic string `gorm:"column:brand_pic" json:"brandPic"`
	// 用户 ID，gorm:"column:user_id" 表示该字段对应数据库列名为 user_id
	UserID string `gorm:"column:user_id" json:"userId"`
	// 备注，gorm:"column:memo" 表示该字段对应数据库列名为 memo
	Memo string `gorm:"column:memo" json:"memo"`
	// 顺序，gorm:"column:seq" 表示该字段对应数据库列名为 seq
	Seq int `gorm:"column:seq" json:"seq"`
	// 状态，gorm:"column:status" 表示该字段对应数据库列名为 status
	Status int `gorm:"column:status" json:"status"`
	// 简要描述，gorm:"column:brief" 表示该字段对应数据库列名为 brief
	Brief string `gorm:"column:brief" json:"brief"`
	// 记录时间，gorm:"column:rec_time" 表示该字段对应数据库列名为 rec_time
	RecTime *time.Time `gorm:"column:rec_time" json:"recTime"`
	// 更新时间，gorm:"column:update_time" 表示该字段对应数据库列名为 update_time
	UpdateTime *time.Time `gorm:"column:update_time" json:"updateTime"`
	// 品牌首字母，gorm:"column:first_char" 表示该字段对应数据库列名为 first_char
	FirstChar string `gorm:"column:first_char" json:"firstChar"`
	// 内容，gorm:"column:content" 表示该字段对应数据库列名为 content
	Content string `gorm:"column:content" json:"content"`
}

// TableName 定义数据库表名
func (TzBrand) TableName() string {
	return "tz_brand"
}

type TzProdComm struct {
	ProdCommID   uint64    `gorm:"column:prod_comm_id;primaryKey;autoIncrement" json:"prodCommId,omitempty"`
	ProdID       uint64    `gorm:"column:prod_id" json:"prodId,omitempty"`
	OrderItemID  uint64    `gorm:"column:order_item_id" json:"orderItemId,omitempty"`
	UserID       string    `gorm:"column:user_id" json:"userId,omitempty"`
	Content      string    `gorm:"column:content" json:"content,omitempty"`
	ReplyContent string    `gorm:"column:reply_content" json:"replyContent,omitempty"`
	RecTime      time.Time `gorm:"column:rec_time" json:"recTime"`
	ReplyTime    time.Time `gorm:"column:reply_time" json:"replyTime"`
	ReplySts     int       `gorm:"column:reply_sts" json:"replySts,omitempty"`
	Postip       string    `gorm:"column:postip" json:"postip,omitempty"`
	Score        int8      `gorm:"column:score" json:"score,omitempty"`
	UsefulCounts int       `gorm:"column:useful_counts" json:"usefulCounts,omitempty"`
	Pics         string    `gorm:"column:pics" json:"pics,omitempty"`
	IsAnonymous  int       `gorm:"column:is_anonymous" json:"isAnonymous,omitempty"`
	Status       int       `gorm:"column:status" json:"status,omitempty"`
	Evaluate     int8      `gorm:"column:evaluate" json:"evaluate,omitempty"`
}

func (a TzProdComm) TableName() string {
	return "tz_prod_comm"
}
